// 有一个 X*Y 的方格, 一个机器人只能走格点且只能向右或者向下走,
//  要从左上角走到右下角，请设计一个算法,
// 计算机器人有多少种走法。给定两个个正整数X , Y, 返回机器人走法的数目。
/**
 * @desc  排列数
 * @param {number} x
 * @param {number} y
 * @returns {number}
 */
function ff(x, y) {
  if (x === 1 || y === 1) return 1;

  return ff(x, y - 1) + ff(x - 1, y);
}
const fMemo = Array.from({ length: 100 });
fMemo[0] = 1;
fMemo[1] = 1;
/**
 * @param {number} n
 * @returns {number}
 */
const fact = (n) => (fMemo[n] ??= n * fact(n - 1));

/**
 * @param {number} x
 * @param {number} y
 * @returns {number}
 */
const ff2 = (x, y) => fact(x + y - 2) / (fact(x - 1) * fact(y - 1));

console.log(ff(8, 8), ff2(8, 8)); // 2
